package com.hspedu.inputstream_;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @author DL5O
 * @version 1.0
 * 演示FileInputStream的使用(字节输入流 文件-->程序)
 */
public class FileInputStream_ {
    public static void main(String[] args) {

    }

    /**
     * 演示读取文件
     * 单个字节的读取，效率比较低
     * -> 使用read(byte)
     */
    @Test
    public void readFile01(){
        String filePath = "d:\\hello.txt";
        int readData = 0;
        FileInputStream fileInputStream = null;
        try {
            //创建FileInputStream,对象用于读取文件
             fileInputStream = new FileInputStream(filePath);

            //从此输入流中读取一个数据字节。如果没有输入可用，则此方法将阻塞。
            //下一个数据字节；如果已到达文件末尾，则返回 -1。
            while((readData = fileInputStream.read())!= -1) {
                System.out.print((char)readData);
            }
            System.out.println();

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭流文件，释放资源
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 使用read(byte[] b) 读取文件，提高效率
     */
    @Test
    public void readFile02(){
        String filePath = "d:\\hello.txt";
        //字节数组
        byte[] buf = new byte[8];//一次度8个字节
        int readLength = 0;
        FileInputStream fileInputStream = null;
        try {
            //创建FileInputStream,对象用于读取文件
            fileInputStream = new FileInputStream(filePath);

            //如果读取正常，返回实际读取的字节数

            while((readLength= fileInputStream.read(buf))!= -1) {
                /*for (int i = 0; i < buf.length; i++) {
                    System.out.print((char)buf[i]);
                }*/
                System.out.print(new String(buf,0,readLength));
            }
            System.out.println();

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭流文件，释放资源
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


